package com.zx.练习题._2022面试题;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 1.HR给面试官安排面试的时候，需要识别出来面试官已经占用的时间段  以数组 intervals 表示若干个面试区间的集合，
 * 其中单个区间为 intervals[i] = [starti, endi]。请合并所有重叠的面试区间，并返回一个不重叠的面试区间数组，该数组需恰好覆盖输入中的所有区间。
 * 输入：intervals = [[1,3], [6, 8], [5, 7]] 输出：[[1,3], [5, 8]] 解释：面试区间  [5,7] 和 [6,8] 重叠, 将它们合并为 [5,8]
 */
public class Demo2 {

    public static void main(String[] args) {
        // 使用二进制表示占用
        int res = 0;
        int[][] intervals = {{1, 3}, {6, 8}, {5, 7}};
        for (int i = 0; i < intervals.length; i++) {
            int begin = intervals[i][0];
            int end = intervals[i][1];
            for (int j = begin; j <= end; j++) {
                res = res | (1 << j);
            }
        }

        System.out.println(Integer.toBinaryString(res));

        List<int[]> resList = new ArrayList<>();
        int[] ints = null;

        for (int i = 0; i < 24; i++) {
            int num = res >> i & 1;
            if (num == 1) {
                if (ints == null) {
                    ints = new int[2];
                    ints[0] = i;
                    resList.add(ints);
                } else {
                    ints[1] = i;
                }
            } else {
                ints = null;
            }
        }

        for (int i = 0; i < resList.size(); i++) {
            System.out.println(Arrays.toString(resList.get(i)));
        }

    }
}
